ক্লোজার (Clojure) প্রোগ্রামিং ভাষায় Fully Qualified Names (FQNs) এবং Aliases ব্যবহার করা হয় যাতে কোডটি আরও পরিষ্কার এবং সুসংগঠিত হয়। এই ধারণাগুলো নামের সংঘর্ষ (name clashes) এবং মডিউল ব্যবস্থাপনা (module management) থেকে রক্ষা পেতে সাহায্য করে। Clojure-এ বিভিন্ন লাইব্রেরি এবং স্পেসিফিক নামের ব্যবহারের জন্য এই দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য ব্যবহার করা হয়।
Fully Qualified Names (FQNs) হলো একটি নির্দিষ্ট নাম স্পেস (namespace) সহ সম্পূর্ণ নাম যা একটি ক্লাস, ফাংশন বা ভ্যারিয়েবলকে সুনির্দিষ্টভাবে চিহ্নিত করে। Clojure-এ, যখন কোনো ক্লাস বা ফাংশন অন্যান্য লাইব্রেরি বা নামস্পেসে থাকে, তখন তাদের ব্যবহার করার জন্য তাদের সম্পূর্ণ নাম দিতে হয়।
namespace/name
ধরা যাক, আমরা clojure.string
নামস্পেস থেকে join
ফাংশন ব্যবহার করতে চাই:
(clojure.string/join "-" ["Hello" "World"]) ; আউটপুট: "Hello-World"
এখানে, clojure.string/join
হলো একটি Fully Qualified Name (FQN), যা join
ফাংশনকে clojure.string
নামস্পেসের অন্তর্গত হিসাবে চিহ্নিত করে।
ক্লোজারে alias ব্যবহার করে আপনি কোনো দীর্ঘ নামস্পেসের জন্য ছোট নাম (shortcut) নির্ধারণ করতে পারেন। এটি কোড লেখা এবং পড়া সহজ করে তোলে। require
ফাংশন ব্যবহার করে নামস্পেসে একটি এলিয়াস অ্যাসাইন করা হয়। এলিয়াস ব্যবহারের ফলে কোডটি আরও পরিষ্কার এবং কমপ্যাক্ট হয়।
(ns my-namespace
(:require [clojure.string :as str])) ; 'clojure.string' কে 'str' নাম দিয়ে এলিয়াস করলাম
(str/join "-" ["Hello" "World"]) ; আউটপুট: "Hello-World"
এখানে, আমরা clojure.string
নামস্পেসকে str
নামে এলিয়াস দিয়েছি, যাতে clojure.string/join
লেখার পরিবর্তে শুধুমাত্র str/join
ব্যবহার করতে পারি। এটি কোডের পাঠযোগ্যতা এবং লিখনক্ষমতা বৃদ্ধি করে।
require
এবং as
KeywordClojure-এ নামস্পেস ব্যবহার করার জন্য সাধারণভাবে require
ফাংশনটি ব্যবহার করা হয়। এই ফাংশনটি আপনার নামস্পেসে অন্য একটি নামস্পেসকে অন্তর্ভুক্ত (include) করার জন্য ব্যবহৃত হয় এবং সেখানে এলিয়াস অ্যাসাইন করা সম্ভব।
(ns your-namespace
(:require [some.namespace :as alias]))
এখানে, some.namespace
নামস্পেসের ফাংশন বা ক্লাসগুলির জন্য alias
নামটি ব্যবহার করা হবে।
require
ফাংশন(ns my-namespace
(:require [clojure.set :as set])) ; 'clojure.set' কে 'set' নামে এলিয়াস করলাম
(def example-set (set/union #{1 2 3} #{3 4 5})) ; আউটপুট: #{1 2 3 4 5}
এখানে, আমরা clojure.set
নামস্পেসকে set
এলিয়াস দিয়ে অন্তর্ভুক্ত করেছি এবং union
ফাংশনটি set/union
এর মাধ্যমে ব্যবহার করেছি।
একই নামস্পেসে একাধিক এলিয়াস ব্যবহারও সম্ভব। আপনি একাধিক নামস্পেসের জন্য বিভিন্ন এলিয়াস অ্যাসাইন করতে পারেন।
(ns my-namespace
(:require [clojure.string :as str]
[clojure.set :as set]))
(str/join "-" ["Hello" "World"]) ; আউটপুট: "Hello-World"
(set/union #{1 2 3} #{3 4 5}) ; আউটপুট: #{1 2 3 4 5}
এখানে, আমরা দুটি আলাদা নামস্পেস clojure.string
এবং clojure.set
এর জন্য str
এবং set
এলিয়াস ব্যবহার করেছি।
ক্লোজারে নামস্পেস রিফ্লেকশন ব্যবহার করে আপনি বর্তমান নামস্পেসের সম্পর্কে তথ্য জানতে পারেন। আপনি জানতে পারবেন কোনো নামস্পেসে কোন ফাংশন বা ভ্যারিয়েবল আছে।
(ns my-namespace
(:require [clojure.string :as str]))
(keys (ns-publics 'clojure.string)) ; আউটপুট: (blank? capitalize join ... )
এখানে, ns-publics
ফাংশন ব্যবহার করে আমরা clojure.string
নামস্পেসের সমস্ত পাবলিক ফাংশনের নাম দেখতে পাচ্ছি।
clojure.string/join
).clojure.string
কে str
এলিয়াস দেওয়া).require
: অন্য নামস্পেস ব্যবহার করার জন্য require
ফাংশনটি ব্যবহৃত হয়, যেখানে এলিয়াসও দেওয়া যায়।এই দুটি বৈশিষ্ট্য, FQNs এবং Aliases, Clojure-এ কোডের পরিচ্ছন্নতা এবং মডুলারিটি বজায় রাখতে সাহায্য করে, বিশেষ করে যখন আপনি অনেক লাইব্রেরি এবং নামস্পেসের সাথে কাজ করছেন।
common.read_more